사용 중인 모든 EC2 의 플랫폼 버전 확인하기

사용 중인 모든 EC2 의 플랫폼 버전 확인하기

사용 중인 각 EC2의 플랫폼 정보를 CLI 커맨드로 확인하는 방법을 알아봅니다
Clock Icon2024.07.09

안녕하세요 클래스메소드의 수재입니다.

최근에 OpenSSH의 취약점[1]이 발견된 일이 있었습니다.
그래서 해당 취약점에 대해서 대응하는 인스턴스를 확인해야 할 일이 있었어서 내용을 정리할 겸 적어보려 합니다.

결론부터

aws ssm describe-instance-information 라는 커맨드를 이용합니다.
필요에 따라 --query 'InstanceInformationList[*].[InstanceId,PlatformType,PlatformName, PlatformVersion]' 등 쿼리를 사용하여 필터링합니다.

플랫폼 확인하기

EC2의 OS를 확인하려면 단순히 EC2 콘솔에서도 확인할 수 있습니다.
다만 인스턴스 수가 많으면 각 인스턴스마다 확인하는 건 쉽지 않기 때문에 CLI로 한 번에 확인하는 경우가 많습니다.

CLI로 확인할 때 보통 aws ssm describe-instance-information 라는 커맨드를 이용합니다.
해당 커맨드의 상세한 정보는 공식 문서를 확인해주세요.

전제 조건

커맨드를 사용하기 위한 전제조건 으로는 SSM 관리형 인스턴스여야 합니다.
즉,"amazon-ssm-agent가 인스톨되어있고 필요한 IAM 권한(AmazonSSMManagedInstanceCore)이 연결되어 있는 상태"여야 합니다.
또한 JSON 을 처리하기 위해 리눅스의 경우 jq 가 인스톨되어 있어야 합니다.

그리고 SSM Agent가 설치되어 있어야 합니다.
최신 AWS에서 제공하고 있는 최신 AMI의 경우 대부분 SSM Agent가 인스톨되어 있지만 오래 된 AMI나 커스텀 AMI의 경우 에이전트가 없을 수도 있습니다.
현재 운용중인 환경에서 SSM Agent가 가동중인지 확인하려면 다음 문서를 확인해주세요.

마지막으로 AWS Systems Manager와 통신이 가능한 상태여야 합니다.
완전히 격리된 인스턴스는 인식이 되지 않습니다.

따라서 프라이빗 인스턴스라면 NAT Gateway를 통해 외부 네트워크와 통신하거나 엔드포인트를 통하여 SSM 으로 조작이 가능해야 합니다.
엔드포인트를 이용하여 SSM 과 통신하는 방법에 대해선 다음 공식 문서를 참고해주세요.

실행하기

aws ssm describe-instance-information 커맨드만 실행하면 다음과 같이 출력됩니다.

{
    "InstanceInformationList": [
        {
            "InstanceId": "i-01234566778",
            "PingStatus": "Online",
            "LastPingDateTime": "2024-07-09T02:36:58.883000+00:00",
            "AgentVersion": "3.3.380.0",
            "IsLatestVersion": false,
            "PlatformType": "Linux",
            "PlatformName": "Amazon Linux",
            "PlatformVersion": "2023",
            "ResourceType": "EC2Instance",
            "IPAddress": "169.0.5.212",
            "ComputerName": "ip-169-0-5-212.ap-northeast-1.compute.internal",
            "SourceId": "i-01234566778",
            "SourceType": "AWS::EC2::Instance"
        },
        ... 생략 ...
    ]
}

인스턴스 ID와 플랫폼 관련 파라미터만 나오도록 필터링하고 테이블 형식으로 출력하려면 다음 커맨드를 입력합니다.

aws ssm describe-instance-information --output table \ 
--query 'InstanceInformationList[*].[InstanceId,PlatformType,PlatformName,PlatformVersion]'

----------------------------------------------------------------------------------------------
|                                 DescribeInstanceInformation                                |
+----------------------+----------+--------------------------------------------+-------------+
|  i-01234567 |  Windows |  Microsoft Windows Server 2022 Datacenter  |  10.0.20348 |
|  i-01234567 |  Linux   |  Ubuntu                                    |  24.04      |
|  i-01234567 |  Linux   |  Amazon Linux                              |  2023       |
+----------------------+----------+--------------------------------------------+-------------+

마무리

이 글에서는 플랫폼의 정보만 확인하는 쿼리를 설정했지만 필요에 따라 실행중인 EC2의 다른 정보를 가져오도록 할 수도 있습니다.

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 must01940 지메일로 보내주시면 감사합니다.

참고 자료

脚注
  1. 대상 OS는 Amazon Linux 2023, Red Hat Enterprise Linux 9, Ubutu 22.04 이후 버전 등 이었습니다. 참고: OpenSSH 제품 보안 업데이트 권고 ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.